From 60b24b3d5951e159d09f42ed766c404e4b1acc4e Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 11 Feb 2023 00:38:55 -0800 Subject: invoice type toggle --- .../(app)/[username]/invoice/[hash]/+page.svelte | 43 ++++++++++++++++++++-- .../[username]/payments/[...page]/+page.svelte | 12 +++--- .../[username]/receive/[...param]/+page.svelte | 5 --- 3 files changed, 45 insertions(+), 15 deletions(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/routes/(app)/[username]/invoice/[hash]/+page.svelte b/src/routes/(app)/[username]/invoice/[hash]/+page.svelte index ad9721e7..b5571f23 100644 --- a/src/routes/(app)/[username]/invoice/[hash]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[hash]/+page.svelte @@ -1,12 +1,14 @@
+
+ + + +
{:else if p.with} - -
-
- -
-
{p.with.username}
+
+
+
-
+
{p.with.username}
+
{:else if p.type === types.classic} {amount ? $t('payments.next') : $t('payments.sendersChoice')} - -
- {type[0].toUpperCase() + type.substring(1, type.length)} - -
-- cgit v1.2.3 From 979d9dd27a147bae13ba953a7e260412fa024f57 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 14 Feb 2023 11:19:12 -0800 Subject: handle sending to user --- src/lib/utils.js | 2 ++ src/routes/(app)/[username]/(profile)/+page.svelte | 1 - src/routes/(app)/payment/[id]/+page.svelte | 42 ++++++++++++++++------ src/routes/(app)/send/[...text]/+page.server.js | 5 +-- 4 files changed, 36 insertions(+), 14 deletions(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/lib/utils.js b/src/lib/utils.js index b3bb29ec..86f722b9 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -147,6 +147,8 @@ export const login = async (user, cookies) => { export const auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` }); +export const fiat = (amount, rate) => (amount * rate) / sats; + export const f = (s, currency) => new Intl.NumberFormat('en-US', { style: 'currency', diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index baab8ba1..c704c00d 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -5,7 +5,6 @@ export let data; let { events, invoices, sent, received, subject, user } = data; - console.log(invoices);
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index da21400a..7b2bdb26 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -1,6 +1,6 @@ -
+

{$t(amount < 0 ? 'payments.sent' : 'payments.received')}

@@ -34,13 +32,33 @@ {/if}
-
- {f(fiat, currency)} - ⚡️{`${s(total)}`} + Amount +
+ {f(fiat(amount, rate), currency)} + ⚡️{`${s(amount)}`} +
+
+ +
+ Network fee +
+ {f(fiat(fee, rate), currency)} + ⚡️{`${s(fee)}`}
+ {#if ourfee > 0} +
+ Platform fee +
+ {f(fiat(ourfee, rate), currency)} + ⚡️{`${s(ourfee)}`} +
+
+ {/if} +
+ Date
{format(new Date(created), 'MMMM d')}, {format(new Date(created), 'h:mm aaa')} @@ -49,6 +67,7 @@ {#if type === 'lightning'}
+ Proof
{$t('payments.preimage')}
{ref} @@ -56,12 +75,13 @@
{:else if type === 'bitcoin'}
+ Txid
-
diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index d09b4da9..b1089a5b 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -45,14 +45,15 @@ let parse = async (t, host) => { // bitcoin if (validate(t)) { try { - ({ id } = await get(`/invoice/${t}`)); + ({ id, user } = await get(`/invoice/${t}`)); } catch (e) { let r = `/send/bitcoin/${t}`; if (amount) r += '/' + amount; throw redirect(307, r); } - if (id) throw redirect(307, `/send/${id}`); + if (user) throw redirect(307, `/send/${user.username}`); + else if (id) throw redirect(307, `/send/${id}`); } // user -- cgit v1.2.3 From 3403bf5c6090109725493b4c7a4fef28266beda8 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 15 Feb 2023 19:57:47 -0800 Subject: messages on dashboard --- src/components/Balance.svelte | 2 +- src/lib/nostr.js | 3 +- .../(app)/[username]/(profile)/+page.server.js | 23 ++- src/routes/(app)/[username]/(profile)/+page.svelte | 191 +++++++++++++++------ .../[username]/settings/[...tab]/+page.server.js | 1 + src/routes/(app)/buy/+page.server.js | 19 ++ src/routes/(app)/buy/+page.svelte | 126 ++++++++++++++ .../(app)/send/lightning/[payreq]/+page.svelte | 2 +- 8 files changed, 306 insertions(+), 61 deletions(-) create mode 100644 src/routes/(app)/buy/+page.server.js create mode 100644 src/routes/(app)/buy/+page.svelte (limited to 'src/routes/(app)/[username]') diff --git a/src/components/Balance.svelte b/src/components/Balance.svelte index e95e5dde..5d993c28 100644 --- a/src/components/Balance.svelte +++ b/src/components/Balance.svelte @@ -9,7 +9,7 @@
{#if isNaN($animatedRate)} -
---
+
—
{:else} {f((user.balance * $animatedRate) / sats, user.currency)} {/if} diff --git a/src/lib/nostr.js b/src/lib/nostr.js index de19b477..13251856 100644 --- a/src/lib/nostr.js +++ b/src/lib/nostr.js @@ -80,7 +80,7 @@ export let decrypt = async ({ event, user }) => { return Buffer.from(message).toString('utf8'); } catch (e) { - console.log(e); + // console.log(e); } }; @@ -119,6 +119,7 @@ let getPrivateKey = async (user) => { seed = mnemonicToSeedSync(mnemonic); key = bip32.fromSeed(seed); child = key.derivePath("m/44'/1237'/0'/0/0"); + return child.privateKey; }; diff --git a/src/routes/(app)/[username]/(profile)/+page.server.js b/src/routes/(app)/[username]/(profile)/+page.server.js index c68cfecc..d1fa2f41 100644 --- a/src/routes/(app)/[username]/(profile)/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/+page.server.js @@ -1,22 +1,33 @@ import { auth, get } from '$lib/utils'; export async function load({ cookies, params, parent, url }) { - let { subject } = await parent(); + let { user, subject } = await parent(); let { pubkey } = subject; + let { since = 0 } = params; - let events = []; + let messages = []; + + if (user) { + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + } + + let notes = []; try { - events = await get(`/${pubkey}/notes`); + notes = await get(`/${pubkey}/notes`); } catch (e) { - console.log(`failed to fetch nostr events for ${pubkey}`, e); + console.log(`failed to fetch nostr notes for ${pubkey}`, e); } - events.map((e) => { + notes.map((e) => { e.seen = e.created_at; }); let { invoices, sent, received } = await get('/requests', auth(cookies)); - return { invoices, events, sent, received }; + return { invoices, messages, notes, sent, received }; } diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index c704c00d..45fe1d84 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -1,75 +1,162 @@ -
+
{#if user?.id === subject.id} - - {/if} -
+
+ {#if user.balance > 0 && false} +

Balance

+
+ +
+ {:else} +
+

Welcome

+ +

+ Get started by making a deposit or getting someone to pay you in Bitcoin! +

-
- {#each invoices as { amount, currency, rate, request: { requester, recipient }, hash }} - {@const requested = user.username === requester?.username} - -
-
-
- {#if requested} - + {/if} + + {#if invoices.length} +
+

Invoices

+ {#each invoices as { amount, currency, rate, request: { requester, recipient }, hash }} + {@const requested = user.username === requester?.username} + + + {/if} + {#if received.length} +
+

Requests

- {#each received as { id, invoice, memo, requester: r }} - -
-
-
+ {#each received as { id, invoice, memo, requester: r }} + +
- -
-

{r.username}

-

{memo}

+
+
+ +
+

{r.username}

+

{memo}

+
+
+
+
+
-
- + + {/each} +
+ {/if} + + {#if latest.length} +
+

Messages

+ {#each latest as { content, user }} +
+
+
+
{user.username}
+ {content}
-
- - {/each} + {/each} +
+ {/if}
+ + diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index dd16459f..94240adc 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -9,6 +9,7 @@ export function load({ params, url }) { export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); + form.prompt = form.prompt === 'on' let user = { ...(await get('/me', auth(cookies))), ...form }; try { diff --git a/src/routes/(app)/buy/+page.server.js b/src/routes/(app)/buy/+page.server.js new file mode 100644 index 00000000..e03d6c0a --- /dev/null +++ b/src/routes/(app)/buy/+page.server.js @@ -0,0 +1,19 @@ +import { env } from '$env/dynamic/private'; +import { error, redirect } from '@sveltejs/kit'; +import { post, auth } from '$lib/utils'; +import { createTicket } from '$lib/ticket'; + +export const actions = { + default: async ({ cookies, request }) => { + let form = await request.formData(); + + await post('/buy', { + number: form.get('number').replace(/\s+/g, ''), + month: form.get('expiry').slice(0, 2), + year: form.get('expiry').slice(-2), + cvc: form.get('cvc') + }, auth(cookies)); + + throw redirect(307, `/launch/thanks/${asset}`); + } +}; diff --git a/src/routes/(app)/buy/+page.svelte b/src/routes/(app)/buy/+page.svelte new file mode 100644 index 00000000..34cfc2e5 --- /dev/null +++ b/src/routes/(app)/buy/+page.svelte @@ -0,0 +1,126 @@ + + +
+
+ + + +
+ +
+
+
+ +

Buy Bitcoin

+
+

Purchase up to $500 worth of Bitcoin from us.

+ +

+ If you want more, try Kraken + or + ShakePay or ask + around at our next + meetup. +

+ +
{ + loading = true; + return ({ update }) => update() && (loading = false); + }} + > + + + + + + + + + + +
+ +
+
+
+
+
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte index 6ae699d2..e9502636 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte +++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte @@ -89,7 +89,7 @@
{/if} {:else} -
+ - - - - - - - - + {#if user.eligible} + + + + {/if}
{/if} @@ -138,17 +146,23 @@
{/if} - {#if latest.length} -
-

Messages

- {#each latest as { content, user }} -
-
- + {#if latest.length && user.id === subject.id} +
+ {#each latest as { content, pubkey, author, recipient }} + {@const user = author.id === user.id ? recipient : author} + +
+
+ +
+
+
{user.username}
+
+ {content} +
+
-
{user.username}
- {content} -
+ {/each}
{/if} diff --git a/src/routes/(app)/[username]/(profile)/messages/+page.server.js b/src/routes/(app)/[username]/(profile)/messages/+page.server.js deleted file mode 100644 index 63116099..00000000 --- a/src/routes/(app)/[username]/(profile)/messages/+page.server.js +++ /dev/null @@ -1,16 +0,0 @@ -import { get } from '$lib/utils'; - -export async function load({ params, parent, url }) { - let { user, subject } = await parent(); - let { since = 0 } = params; - - let messages = []; - - try { - messages = await get(`/nostr/${user.pubkey}/${subject.pubkey}/${since}/messages`); - } catch (e) { - console.log(`failed to fetch nostr messages`, e); - } - - return { newMessages: messages }; -} diff --git a/src/routes/(app)/[username]/(profile)/messages/+page.svelte b/src/routes/(app)/[username]/(profile)/messages/+page.svelte deleted file mode 100644 index db7b1ced..00000000 --- a/src/routes/(app)/[username]/(profile)/messages/+page.svelte +++ /dev/null @@ -1,123 +0,0 @@ - - -
-

- {$t('payments.sendMessage')} -

- -
- {#each events as data} - {@const ours = data.pubkey === user.pubkey} - {@const theirs = !ours} -
- {#if data.message} - {data.message} - {:else} - - - {/if} -
-
- {format(new Date(data.created_at * 1000), 'MMM d')}, - {format(new Date(data.created_at * 1000), 'h:mm aa')} -
- {/each} -
- - - - - - - -
- - diff --git a/src/routes/(app)/[username]/invoice/[hash]/+page.svelte b/src/routes/(app)/[username]/invoice/[hash]/+page.svelte index b5571f23..2ff92687 100644 --- a/src/routes/(app)/[username]/invoice/[hash]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[hash]/+page.svelte @@ -152,9 +152,9 @@ {/if}
- {txt.substr(0, 10)}...{txt.substr(-10)}
diff --git a/src/routes/(app)/[username]/messages/+page.server.js b/src/routes/(app)/[username]/messages/+page.server.js new file mode 100644 index 00000000..7b651389 --- /dev/null +++ b/src/routes/(app)/[username]/messages/+page.server.js @@ -0,0 +1,19 @@ +import { get } from '$lib/utils'; + +export async function load({ params, parent, url }) { + let { user, subject } = await parent(); + let { since = 0 } = params; + + let messages = []; + + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + messages = messages + .filter((m) => m.recipient.id === subject.id || m.author.id === subject.id) + .sort((a, b) => a.created_at - b.created_at); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + + return { messages, user }; +} diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte new file mode 100644 index 00000000..f8f64aea --- /dev/null +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -0,0 +1,126 @@ + + +
+ {#if messages.length && ready} +
+ {#each messages as event} + {@const ours = event.pubkey === user.pubkey} + {@const theirs = !ours} +
+
+ {#await decrypt({ event, user })} + - + {:then message} + {message} + {/await} +
+
+ +
+
+
+ {format(new Date(event.created_at * 1000), 'MMM d')}, + {format(new Date(event.created_at * 1000), 'h:mm aa')} +
+ {/each} +
+ {/if} + +
+ + + + +
+
+ + diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 2068c306..aacba81e 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -182,7 +182,7 @@ {:else if p.with}
- +
{p.with.username}
diff --git a/src/routes/(app)/buy/+page.svelte b/src/routes/(app)/buy/+page.svelte index 323d5ef0..2f556ada 100644 --- a/src/routes/(app)/buy/+page.svelte +++ b/src/routes/(app)/buy/+page.svelte @@ -1,13 +1,33 @@
@@ -114,6 +134,17 @@
+ +
+
+
+
1
+ Bitcoin +
+
= {f($animatedRate, currency)}
+
+

3% credit card fee applies

+
diff --git a/src/routes/(app)/login/+page.svelte b/src/routes/(app)/login/+page.svelte index 9a1e41da..75998cd0 100644 --- a/src/routes/(app)/login/+page.svelte +++ b/src/routes/(app)/login/+page.svelte @@ -1,5 +1,4 @@
diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index f8f64aea..397d07ac 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -2,7 +2,7 @@ import { browser } from '$app/environment'; import { t } from '$lib/translations'; import { format, parseISO } from 'date-fns'; - import { scale } from 'svelte/transition'; + import { scale, fade } from 'svelte/transition'; import { enhance } from '$app/forms'; import { Avatar, Icon } from '$comp'; import { back, fail, focus } from '$lib/utils'; @@ -14,18 +14,24 @@ export let data; let { messages, subject, user } = data; - let input, pane, ready; + let input, pane; $: initialize($password); let initialize = async (p) => { if (!p) return; - ready = true; + await Promise.all( + messages.map(async (event) => (event.message = await decrypt({ event, user }))) + ); + + messages = messages; tick().then(() => pane && (pane.scrollTop = pane.scrollHeight)); }; - e.subscribe((ev) => { - if (ev?.recipient.id === user.id && !~messages.findIndex((m) => m.id === ev.id)) { - messages.push(ev); + e.subscribe(async (event) => { + let found = ~messages.findIndex((m) => m.id === event?.id); + if (event?.recipient.id === user.id && !found) { + event.message = await decrypt({ event, user }); + messages.push(event); messages = messages; tick().then(() => pane && (pane.scrollTop = pane.scrollHeight)); } @@ -58,6 +64,7 @@ sent = true; } catch (e) { + console.log(e); fail('Failed to send message'); } @@ -67,38 +74,40 @@
- {#if messages.length && ready} -
- {#each messages as event} - {@const ours = event.pubkey === user.pubkey} - {@const theirs = !ours} -
+
+ {#each messages as { id, author, message, created_at, pubkey }} + {@const ours = pubkey === user.pubkey} + {@const theirs = !ours} + + {#if message} +
- {#await decrypt({ event, user })} - - - {:then message} - {message} - {/await} + {message}
- +
- {format(new Date(event.created_at * 1000), 'MMM d')}, - {format(new Date(event.created_at * 1000), 'h:mm aa')} + {format(new Date(created_at * 1000), 'MMM d')}, + {format(new Date(created_at * 1000), 'h:mm aa')}
- {/each} -
- {/if} + {/if} + {/each} +
diff --git a/src/routes/(app)/send/[...text]/+page.svelte b/src/routes/(app)/send/[...text]/+page.svelte index 5a376f9f..5f37cad5 100644 --- a/src/routes/(app)/send/[...text]/+page.svelte +++ b/src/routes/(app)/send/[...text]/+page.svelte @@ -99,7 +99,7 @@
{#each contacts as c} -
+
-- cgit v1.2.3 From 8406bad913e888aaa6cea4fb883e5a92db957084 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 11:49:17 -0800 Subject: profile page fixes --- src/routes/(app)/[username]/(profile)/+page.server.js | 7 ++++--- src/routes/(app)/[username]/(profile)/+page.svelte | 11 ++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/routes/(app)/[username]/(profile)/+page.server.js b/src/routes/(app)/[username]/(profile)/+page.server.js index 2777afdc..085271fd 100644 --- a/src/routes/(app)/[username]/(profile)/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/+page.server.js @@ -5,7 +5,8 @@ export async function load({ cookies, params, parent, url }) { let { pubkey } = subject; let { since = 0 } = params; - let messages = []; + let messages, invoices, sent, received; + messages = invoices = sent = received = []; if (user) { try { @@ -14,6 +15,8 @@ export async function load({ cookies, params, parent, url }) { } catch (e) { console.log(`failed to fetch nostr messages`, e); } + + ({ invoices, sent, received } = await get('/requests', auth(cookies))); } let notes = []; @@ -28,7 +31,5 @@ export async function load({ cookies, params, parent, url }) { e.seen = e.created_at; }); - let { invoices, sent, received } = await get('/requests', auth(cookies)); - return { invoices, messages, notes, sent, received }; } diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index 4d4f3b13..e5a42f07 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -15,7 +15,8 @@ let i = 0; e.subscribe(async (event) => { - if (event?.recipient.id === user.id && !~latest.findIndex((m) => m.id === event.id)) { + if (!event) return; + if (event.recipient.id === user?.id && !~latest.findIndex((m) => m.id === event.id)) { event.content = await decrypt({ event, user }); let i = latest.findIndex((m) => m.pubkey === event.pubkey); @@ -23,9 +24,13 @@ if (~i) latest.splice(i, 1); else latest.pop(); - console.log(latest); latest.unshift(event); + console.log( + 'latest', + latest.map((m) => m.id) + ); + latest = latest; } }); @@ -164,7 +169,7 @@
{/if} - {#if latest.length && user.id === subject.id} + {#if latest.length && user?.id === subject.id}
{#each latest as { content, pubkey, author, recipient }} {@const user = author.id === user.id ? recipient : author} -- cgit v1.2.3 From b41b65ffc0816f5c3ac65b2e85ed37f96e4f61c0 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:05:15 -0800 Subject: refresh data --- src/routes/(app)/[username]/(profile)/+page.svelte | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index e5a42f07..596962d0 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -9,13 +9,15 @@ export let data; let { messages, notes, invoices, sent, received, subject, user } = data; + $: refresh(data); + let refresh = (d) => ({ messages, notes, invoices, sent, received, subject, user } = d); let keys = new Set(); let latest = []; let i = 0; e.subscribe(async (event) => { - if (!event) return; + if (!event) return; if (event.recipient.id === user?.id && !~latest.findIndex((m) => m.id === event.id)) { event.content = await decrypt({ event, user }); @@ -25,12 +27,6 @@ else latest.pop(); latest.unshift(event); - - console.log( - 'latest', - latest.map((m) => m.id) - ); - latest = latest; } }); -- cgit v1.2.3 From 4625c1f58e8f6a1b1e6a73dfe5c5d6871b0138bc Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:12:34 -0800 Subject: wait for messages to be ready --- src/routes/(app)/[username]/(profile)/+page.svelte | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index 596962d0..168556e4 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -15,16 +15,17 @@ let keys = new Set(); let latest = []; let i = 0; + let ready; e.subscribe(async (event) => { - if (!event) return; + if (!(event && ready)) return; if (event.recipient.id === user?.id && !~latest.findIndex((m) => m.id === event.id)) { event.content = await decrypt({ event, user }); let i = latest.findIndex((m) => m.pubkey === event.pubkey); - - if (~i) latest.splice(i, 1); - else latest.pop(); + let popped; + if (~i) popped = latest.splice(i, 1); + else popped = latest.pop(); latest.unshift(event); latest = latest; @@ -33,6 +34,7 @@ $: initialize($password); let initialize = async (p) => { + ready = false; if (!p) return; while (latest.length < 3 && i < messages.length) { let event = messages[i]; @@ -46,6 +48,7 @@ } latest = latest; + ready = true; }; -- cgit v1.2.3 From 152abe4cecf9447f90ebc4c665fa0595630c874f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:17:42 -0800 Subject: tweak --- src/routes/(app)/[username]/messages/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 397d07ac..1e0336f3 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -75,7 +75,7 @@
{#each messages as { id, author, message, created_at, pubkey }} -- cgit v1.2.3 From 50f9c3c71a598ce10ad3191155b2cca25cfbf7b2 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:32:49 -0800 Subject: animate --- src/routes/(app)/[username]/messages/+page.svelte | 38 +++++++++++++++++++---- 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'src/routes/(app)/[username]') diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 1e0336f3..a6b7005f 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -1,8 +1,9 @@
+ -- cgit v1.2.3 From 50b270db6fda60b5b3e39a9dbada5c27a14cbad1 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 22 Feb 2023 19:38:55 -0800 Subject: fee slider wip --- doc/img/translate_github.png | Bin 78506 -> 78512 bytes src/components/Slider.svelte | 56 +++++++++++++++++ src/components/index.js | 1 + src/lib/utils.js | 5 ++ .../[username]/(profile)/request/+page.server.js | 6 +- .../[username]/invoice/[hash]/tip/+page.svelte | 57 +---------------- .../[username]/settings/[...tab]/+page.server.js | 4 +- src/routes/(app)/ln/[lnurl]/+page.server.js | 9 +-- src/routes/(app)/login/+page.server.js | 4 +- .../(app)/pot/[name]/withdraw/+page.server.js | 5 +- src/routes/(app)/register/+page.server.js | 4 +- .../bitcoin/[address]/[...amount]/+page.server.js | 18 +++--- .../bitcoin/[address]/[...amount]/+page.svelte | 70 ++++++++++++++++----- src/routes/(app)/send/invoice/[id]/+page.server.js | 4 +- .../(app)/send/lightning/[payreq]/+page.server.js | 4 +- .../send/pot/[name]/[...amount]/+page.server.js | 2 +- .../user/[username]/[...amount]/+page.server.js | 4 +- src/routes/(app)/support/+page.server.js | 5 +- static/tickets/21.png | Bin 327907 -> 327913 bytes 19 files changed, 152 insertions(+), 106 deletions(-) create mode 100644 src/components/Slider.svelte (limited to 'src/routes/(app)/[username]') diff --git a/doc/img/translate_github.png b/doc/img/translate_github.png index 22e33174..021ad5cb 100644 Binary files a/doc/img/translate_github.png and b/doc/img/translate_github.png differ diff --git a/src/components/Slider.svelte b/src/components/Slider.svelte new file mode 100644 index 00000000..84482c9d --- /dev/null +++ b/src/components/Slider.svelte @@ -0,0 +1,56 @@ + + + + + diff --git a/src/components/index.js b/src/components/index.js index ab54e09f..0d1d8d1d 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,3 +1,4 @@ +export { default as Slider } from './Slider.svelte'; export { default as Pinpad } from './Pinpad.svelte'; export { default as Balance } from './Balance.svelte'; export { default as Lnurlp } from './Lnurlp.svelte'; diff --git a/src/lib/utils.js b/src/lib/utils.js index 86f722b9..1d064c9a 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -148,6 +148,11 @@ export const login = async (user, cookies) => { export const auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` }); export const fiat = (amount, rate) => (amount * rate) / sats; +export const fd = async (req) => { + let obj = Object.fromEntries(await req.formData()); + for (let k in obj) (obj[k] === 'undefined' && (obj[k] = undefined)) ||( obj[k] === 'false' && (obj[k] = false)); + return obj; +}; export const f = (s, currency) => new Intl.NumberFormat('en-US', { diff --git a/src/routes/(app)/[username]/(profile)/request/+page.server.js b/src/routes/(app)/[username]/(profile)/request/+page.server.js index 2c1d6bde..e7ad6a8f 100644 --- a/src/routes/(app)/[username]/(profile)/request/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/request/+page.server.js @@ -1,15 +1,15 @@ import { redirect } from '@sveltejs/kit'; -import { auth, post } from '$lib/utils'; +import { fd, auth, post } from '$lib/utils'; export const actions = { create: async ({ cookies, params, request, url }) => { - let form = Object.fromEntries(await request.formData()); + let form = await fd(request); let { id, requester } = await post('/requests', form, auth(cookies)); throw redirect(307, `/${params.username}/request/${id}`); }, delete: async ({ cookies, request }) => { - let form = Object.fromEntries(await request.formData()); + let form = await fd(request); let r = await post('/requests/delete', form, auth(cookies)); } }; diff --git a/src/routes/(app)/[username]/invoice/[hash]/tip/+page.svelte b/src/routes/(app)/[username]/invoice/[hash]/tip/+page.svelte index d033c413..296ef9c6 100644 --- a/src/routes/(app)/[username]/invoice/[hash]/tip/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[hash]/tip/+page.svelte @@ -3,7 +3,7 @@ import { browser } from '$app/environment'; import { invoice as inv, request } from '$lib/store'; import { copy, focus, f, sat, get, reverseFormat, s, sats } from '$lib/utils'; - import { Icon } from '$comp'; + import { Icon, Slider } from '$comp'; import { goto } from '$app/navigation'; import { t } from '$lib/translations'; import { enhance } from '$app/forms'; @@ -37,9 +37,6 @@ customInput.value = ''; } tipPercent = e.target.value; - - clearTimeout(timeout); - timeout = setTimeout(update, 800); }; let submitting; @@ -56,10 +53,6 @@ }; let submit; - let update = async () => { - await tick(); - //submit.click(); - }; export let data; $: refresh(data); @@ -123,16 +116,7 @@ {#if !showCustomAmount}
{Math.round(tipPercent)}%
- +
@@ -201,43 +185,6 @@